package com.xinwangai.jingbai.service;

import com.github.pagehelper.PageInfo;
import com.xinwangai.jingbai.pojo.DTO.CheckinActivityDTO;
import com.xinwangai.jingbai.pojo.VO.*;

import java.util.List;
import java.util.Map;

/**
 * 简化版打卡系统服务接口
 * 移除子打卡概念，只保留主打卡活动
 *
 * @author guo.wenliang
 * @since 2025/7/16 20:45
 */
public interface CheckinService {

    // ============= 打卡活动相关 =============

    /**
     * 创建打卡活动
     */
    int createCheckinActivity(CheckinActivity checkinActivity);

    /**
     * 更新打卡活动
     */
    int updateCheckinActivity(CheckinActivity checkinActivity);

    /**
     * 删除打卡活动
     */
    int deleteCheckinActivity(Long id, Long userId);

    /**
     * 获取打卡活动列表
     */
    PageInfo<CheckinActivity> getCheckinActivities(CheckinActivityDTO checkinActivityDTO);

    /**
     * 获取打卡活动详情
     */
    CheckinActivity getCheckinActivityDetail(Long id);

    // ============= 打卡记录相关 =============

    /**
     * 创建打卡记录
     */
    int createCheckinRecord(CheckinRecord checkinRecord);

    /**
     * 更新打卡记录
     */
    int updateCheckinRecord(Long id, String status, String notes, Integer duration, Long userId);

    /**
     * 删除打卡记录
     */
    int deleteCheckinRecord(Long id, Long userId);

    /**
     * 获取打卡记录列表
     */
    PageResult<CheckinRecord> getCheckinRecords(Long activityId, Long userId, String startDate, String endDate, Integer pageNum, Integer pageSize);

    // ============= 统计相关 =============

    /**
     * 获取打卡日历数据
     */
    Map<String, Integer> getCheckinCalendar(Long userId, String year, String month, Long activityId);

    /**
     * 获取打卡统计数据
     */
    CheckinStats getCheckinStats(Long userId, Long activityId);

    /**
     * 获取仪表板统计数据
     */
    Map<String, Object> getDashboardStats(Long userId);

    // ============= 参与者相关 =============

    /**
     * 添加活动参与者
     */
    int addParticipants(Long activityId, List<String> participants);

    /**
     * 移除活动参与者
     */
    int removeParticipant(Long activityId, String participant);

    /**
     * 获取参与者列表
     */
    List<String> getParticipants(Long activityId);

    /**
     * 加入活动
     */
    int joinActivity(Long activityId, Long userId, String userName);

    /**
     * 退出活动
     */
    int leaveActivity(Long activityId, Long userId);
}
